专有编解码器


预制构建的NW.js支持专有编解码器

基于Chromium的NW.js , 媒体模块本质上是相同的 .

预制构建的NW.js支持以下编解码器:

theora,vorbis,vp8,pcm_u8,pcm_s16le,pcm_s24le,pcm_f32le,pcm_s16be,pcm_s24be

同时支持demuxers:

ogg,matroska,wav

NW.js中启用编解码器

权限以及专利费 , 如果需要使用MP3以及H.264需要支付专利费用 , 获取源码使用权限 . 如果在应用中需要使用专有媒体格式 , 可以咨询律师了解相关权限内容 . 关于源码相关权限信息 , 可以[参考](https://chromium.googlesource.com/chromium/third_party/ffmpeg.git/+/master/CREDITS.chromium)

警告 , 如果没有使用特定编解码器权限 , 使用以下方法或者使用其他的解决方案 , 不能够确保应用能够正常使用以及后续的发布 .

社区获取FFmpeg文件

Chromium项目比较新的版本 , FFmpeg为内置编解码器 . 这样将不能够从Chrome官网得到FFmpeg的DLL文件 . 但可以从预编译文件社区中获取 . 另外 , 也可以通过以下方式自行构建FFmpeg .

脱离NW.js构建FFmpeg的DLL文件

如果使用预制构建的NW.js , 只能够重新构建FFmpeg的DLL文件 , 替换预制构建NW.js中的DLL文件 . 该过程需要下载大约1G大小文件以及个i编译约20G大小的NW.js文件 .

步骤 1. 从GitHub下载定制Chromium的Zip文件 . https://github.com/nwjs/chromium.src/tags中能够找到相配的版本 . 提取压缩文件到本地目录中 , 比如~/nw , 解压之后的文件包括子目录 . 这样源码路径为~/nw/<sub-directory-name> .

步骤 2. 获取依赖

手动获取一下依赖关系 , 以便能够重新构建NW.js .

  • DEPS中 , 拷贝以下目录文件:
    • buildtools
    • tools/gyp
    • third_party/yasm/sources/patched-yasm
    • third_party/ffmpeg
  • buildtools/<os>中 , 下载gn工具
download_from_google_storage --no_resume \
                             --platform=<platform> \
                             --no_auth \
                             --bucket chromium-gn \
                             -s buildtools/<os>/<gn-exe>.sha1
- `<platform>`: Windows系统使用`win32`; `darwin`; Linux系统使用`linux*`
- `<os>`: Windows系统使用`win`; Mac系统使用`mac`; Linux系统使用`linux64`
- `<gn-exe>`: Windows系统使用`gn.exe` for Windows; Mac和Linux系统使用`gn`
  • third_party/llvm-build中 , [Mac和Linux]系统下载clang工具
python tools/clang/scripts/update.py --if-needed
  • third_party/llvm-build中 , [Linux]系统下载库
python build/linux/sysroot_scripts/install-sysroot.py --running-as-hook
  • third_party/libc++-static中 , [Mac]系统下载libc++-static
download_from_google_storage --no_resume \
                             --platform=darwin \
                             --no_auth \
                             --bucket chromium-libcpp \
                             -s third_party/libc++-static/libc++.a.sha1
对于Linux系统开发者 , 首次构建FFmpeg的DDL文件或者执行下一步之前 , 最好运行`build/install-build-deps.sh` . 该脚本将自动安装构建过程依赖关系 .

步骤 3. 替换BUILD.gn

代码根目录中BUILD.gn替换以下内容:

action("dummy") {
  deps = [
    "//third_party/ffmpeg"
  ]
  script = "dummy"
  outputs = ["$target_gen_dir/dummy.txt"]
}

步骤 4. 使用GN工具生成Ninja文件

cd path/to/nw/source/folder
gn gen //out/nw \
 --args='is_debug=false is_component_ffmpeg=true target_cpu="<target_cpu>" is_official_build=true ffmpeg_branding="Chrome"'

: <target_cpu> 应该设置x86x64代表按照32位或64位构建 .

步骤 4. 构建FFmpeg的DDL文件

ninja -C out/nw ffmpeg

You will find the DLL in out/nw folder. The path and file name varies between platforms:

DDL文件在目录out/nw中 . 不同系统中路径和文件名如下:

  • Windows: ffmpeg.dll
  • Mac OS X: libffmpeg.dylib
  • Linux: lib/libffmpeg.so

步骤 5. 使用刚刚构建的DDL文件替换预制构建的NW.js中对应的文件 . 不同系统中路径以及文件名如下:

  • Windows: ffmpeg.dll
  • Mac OS X: nwjs.app/Contents/Versions/<chromium-version>/nwjs Framework.framework/libffmpeg.dylib
  • Linux lib/libffmpeg.so

构建带有专有编解码器的NW.js

如果不适用官网提供的预制构建的NW.js , 可以使用以下过程 , 构建带有专有编解码器的NW.js . 参考构建详细说明以及步骤 .

步骤 1. 安装前提条件以及获取NW.js代码 , 参考构建中的前提条件以及获取代码的相关说明 .

步骤 2. 配置GN过程需要为Chrome设置ffmpeg_branding .

步骤 3. 再次生成ninja文件 .

步骤 4. 重新构建NW.js